﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Migrator.Packets;
using Migrator.Entities;
using Migrator.Util;

namespace Migrator.Services.Registration.Packets
{
    /// <summary>
    /// MobileIP Registration reply packet
    /// 
    /// Packet structure:
    /// 
    /// 0                   1                   2                   3
    /// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    /// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    /// |     Type      |     Code      |           Lifetime            |
    /// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    /// |                          Home Address                         |
    /// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    /// |                           Home Agent                          |
    /// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    /// |                         Identification                        |
    /// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    /// | Extensions ...
    /// +-+-+-+-+-+-+-+-
    /// </summary>
    public class RegistrationReplyPacket : UDPPacket
    {
        public RegistrationReplyPacket(Node source, IPAddress destinationIP, ushort destinationPort)
            : base(source, destinationIP, 434, destinationPort)
        {
        }

        #region Packet fields

        public int Type
        {
            get { return 3; }
        }

        /// <summary>
        /// A value indicating the result of the Registration
        /// Request.
        /// </summary>
        public byte Code
        {
            get;
            set;
        }

        /// <summary>
        /// The number of seconds remaining before the registration
        /// is considered expired.
        /// </summary>
        public ushort Lifetime
        {
            get;
            set;
        }

        /// <summary>
        /// The IP address of the mobile node.
        /// </summary>
        public IPAddress HomeAddress
        {
            get;
            set;
        }

        /// <summary>
        /// The IP address of the mobile node's home agent.
        /// </summary>
        public IPAddress HomeAgent
        {
            get;
            set;
        }

        #endregion
    }
}
